//
// Created by twetec on 25-6-18.
//
#include <network_prober/logger/release_logger.h>

#include <spdlog/sinks/rotating_file_sink.h>
#include <spdlog/sinks/daily_file_sink.h>
#include <spdlog/sinks/basic_file_sink.h>
#include <spdlog/sinks/stdout_color_sinks.h>

namespace network_prober::logger
{
void ReleaseLogger::init()
{
    // 每天23点59分创建一个新的日志文件，文件名：daily_2024-04-07.log
    m_logger = spdlog::daily_logger_mt("daily_logger", RELEASED_LOG_FILE_PATH, 23, 59);
    // 当遇到err级别日志时，立刻将内存中日志信息输出到sink
    m_logger->flush_on(spdlog::level::debug);
    // 设为全局默认logger
    spdlog::set_default_logger(m_logger);
}

ReleaseLogger& ReleaseLogger::getInstance()
{
    static ReleaseLogger instance;
    return instance;
}

ReleaseLogger::ReleaseLogger()
{
    // 移除所有sink
    spdlog::drop_all();
    // 设定日志输出等级，可以输出>=设定等级的日志
    // spdlog::set_level(spdlog::level::trace);
    // 设定日志的输出间隔，
    // spdlog::set_pattern("%Y-%m-%d %H:%M:%S [%l] [%t] - <%s>|<%#>|<%!>,%v");
    // 每隔3秒钟，将内存中的日志信息输出到sink
    spdlog::flush_every(std::chrono::seconds(3));
}

ReleaseLogger::~ReleaseLogger()
{
    // 移除所有sink
    spdlog::drop_all();
    // 关闭日志系统
    spdlog::shutdown();
}

}